#!/usr/bin/env node

// 直接PWM控制测试脚本
const { execSync } = require('child_process');

console.log("🎮 直接PWM控制测试");

// 测试函数
function testPWMControl() {
  try {
    console.log("1. 初始化GPIO引脚...");
    execSync('gpio -g mode 12 out');
    execSync('gpio -g mode 13 out');
    console.log("   ✅ 引脚初始化完成");
    
    // 发送一系列控制信号
    console.log("2. 发送测试信号序列...");
    
    // 中性位置
    console.log("   发送中性信号 (1.5ms)...");
    sendPWMSignal(12, 1.5, 1000);
    sendPWMSignal(13, 1.5, 1000);
    
    // 前进信号
    console.log("   发送前进信号 (1.7ms)...");
    sendPWMSignal(13, 1.7, 2000);
    
    // 右转信号
    console.log("   发送右转信号 (1.8ms)...");
    sendPWMSignal(12, 1.8, 1000);
    
    // 回到中性
    console.log("   回到中性位置...");
    sendPWMSignal(12, 1.5, 500);
    sendPWMSignal(13, 1.5, 500);
    
    console.log("✅ PWM控制测试完成！");
    return true;
  } catch (error) {
    console.error("❌ PWM控制测试失败:", error.message);
    return false;
  }
}

// 发送PWM信号函数
function sendPWMSignal(pin, dutyCycleMs, durationMs) {
  const periodMs = 20; // 50Hz = 20ms周期
  const highTimeMs = dutyCycleMs;
  const lowTimeMs = periodMs - dutyCycleMs;
  
  const cycles = Math.floor(durationMs / periodMs);
  
  for (let i = 0; i < cycles; i++) {
    execSync(`gpio -g write ${pin} 1`);
    sleep(highTimeMs);
    execSync(`gpio -g write ${pin} 0`);
    sleep(lowTimeMs);
  }
}

// 精确延时函数（毫秒）
function sleep(ms) {
  const start = Date.now();
  while (Date.now() - start < ms) {
    // 空循环等待
  }
}

// 主函数
function main() {
  console.log("🚀 开始直接PWM控制测试");
  
  const success = testPWMControl();
  
  if (success) {
    console.log("\n🎉 测试成功完成！");
    console.log("\n💡 如果小车仍然没有反应，请检查:");
    console.log("   1. 硬件连接是否正确");
    console.log("   2. 电源供应是否充足");
    console.log("   3. 电调是否需要特殊校准");
    console.log("   4. 电机是否正常工作");
  } else {
    console.log("\n❌ 测试失败，请检查系统配置");
  }
}

// 执行主函数
main();